package chixing.day20.proxy.jdk_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/*
 * 1.创建代理对象
 * 2.增强实现，在商品进行增删改之后添加日志
 * */
public class MyProxy implements InvocationHandler {

    private Object target;// new ProductServiceImpl()

    public MyProxy(Object target) {
        this.target = target;
    }

    //1.创建代理对象
    public Object createProxy() {
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),//类加载器
                target.getClass().getInterfaces(),//目标对象的父接口
                this);
    }
    //2.增强实现，在商品进行增删改之后添加日志
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("目标对象正在调用:" + method.getName());
//        proxy = this.target;
//        //先执行方法本身
//        Object returnValue = method.invoke(proxy, args);
       Object returnValue = method.invoke(target, args);
        //在判断是否调用了 增 删 改 方法，然后在添加日志
        if (method.getName().startsWith("add") || method.getName().startsWith("update") || method.getName().startsWith("del")) {
            new LogUtil().addLog();
        }
        return returnValue;
    }
}
